package com.elepant.dp.proxy;

/**
 * 静态代理，代理对象 和 被代理对象 都实现了同一个接口
 */
public class Tank implements Movable{
    @Override
    public void move() {
        System.out.println("Tank moving.....");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
        new TankLogProxy(new TankTimeProxy(new Tank())).move();
    }
}

//日志代理
class TankLogProxy implements Movable{
    private Movable m;

    public TankLogProxy(Movable m) {
        this.m = m;
    }

    @Override
    public void move() {
        // 代理先干自己的事
        System.out.println("我是 LogProxy start");

        //执行 被代理对象的 move 方法
        m.move();

        //代理再干自己的事
        System.out.println("我是 LogProxy end");

    }
}


//记录时间代理
class TankTimeProxy implements Movable{
    private Movable m;

    public TankTimeProxy(Movable m) {
        this.m = m;
    }

    @Override
    public void move() {
        // 开始时间
        long start = System.currentTimeMillis();

        //执行 被代理对象的 move 方法
        m.move();

        //结束时间
        long end = System.currentTimeMillis();

        System.out.println("Time:"+(end -start));

    }
}

